// components/calendar/index.js
Component({
  properties: {
  },
  data: {
    day: 1,
    ds: [],
    weeks:[],
    w_m: true
  },
  attached() {
    this.setCurMonth();
    this.setCurWeek();
  },

  methods: {
    changeDay(e){
      let day = e.currentTarget.dataset.day
      this.setData({
        day:day
      });
      this.triggerEvent("change",{
        day:day
      })
    },
    showWeekDay() {
      this.setData({
        w_m: true
      })
    },
    showMonthDay(){
      this.setData({
        w_m: false
      })
    },
    setCurWeek(){
      // 利用时间戳知识获取本周信息 时间戳又可以转化成日期对象
      // (1)获取今天时间戳 获取今天周几 例如今天周四
      // (2)循环四次循环获取今天时间戳前四天的日期
      // (3)循环两次今天后面的日期
      // (4)获取今天的月份和本周每天的月份 进行判断 不相等pre设置为true 否者false
      let date = new Date();
      let todayTime = date.getTime();//毫秒
      let curDate = date.getDate();//今天
      let curDay = date.getDay();//周

      let curMonth = date.getMonth();// 按索引计算月了
      let weeks = [];//存放日期
      // 今天之前
      for (let i = 1; i <= curDay; i++) {
          let t = todayTime-(i*24*60*60*1000);//依此获取前几天的日期
          let d = new Date(t);//时间戳转日期对象
          weeks.unshift({
            day:d.getDate(),
            pre:(d.getMonth() != curMonth)
          })
      }
      // 今天
      weeks.push({
        day:curDate,
        pre:false
      })
      // 今天之后
      for (let i = 1; i <= 6-curDay; i++) {
        let t = todayTime+(i*24*60*60*1000);//依此获取前几天的日期
          let d = new Date(t);//时间戳转日期对象
          weeks.push({
            day:d.getDate(),
            pre:(d.getMonth() != curMonth)
          })
      }
      this.setData({
        weeks:weeks
      })
    },
    setCurMonth() {
      let date = new Date();
      let year = date.getFullYear();
      let month = date.getMonth();
      let day = date.getDate();
      let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
      // 获取当前月份一号的星期信息
      let weekdate = new Date(`${year}-${month + 1}-1`)
      // 例如周六是1号 怎么让他排到第七个位置
      // 条件判断 1号周六前面补六个日期
      let firstDayWeek = weekdate.getDay();
      // 取出上个月天数
      let preMonthDay = days[month - 1];//todo 当month为0先不处理
      // 添加的日期是对象 上个月的需要标明 本月相反
      let ds = [];
      for (let i = preMonthDay; i > preMonthDay - firstDayWeek; i--) {
        // 在这里插入着添加
        ds.unshift({
          day: i,
          pre: true//这个用来标明是上个月
        })
      }
      // 准备当前月数据
      for (let i = 1; i <= days[month]; i++) {
        ds.push({
          day: i,
          pre: false//false标明当前月
        })
      }
      this.setData({
        day: day,
        ds: ds
      })
    }
  }
})
